<?php namespace Home\Controller; 

use Hdphp\Controller\Controller;

//分类页面控制器
class CataController extends Controller{

//  分类主页
    public function index(){
    	$cid=Q('get.cid',0,'intval');
		//1.根据当前的cid获得对应的商品的gid
		$gids = $this->cidGetGids($cid);
//		获得商品表
    	$commodity= new \Common\Model\Commodity;
//		获得cid=13是所有商品
//		if($cid==13){
//			$comdata=$commodity->get();
//		}else{
//			$comdata=$commodity->where("catagory_cid=$cid")->get();
//		}
//		5.通过当前的$gids获得对应的品牌bid
        $bid= $commodity->where("cmid in(" . implode(',', $gids) . ")")->lists('brand_bid');
//		实例化品牌表
        $brand= new \Common\Model\Brand;
//		通过品牌bid获得所有品牌
        $bdata=$brand->where("bid in(" . implode(',', $bid) . ")")->get();
//		分配页面
        View::with('bdata',$bdata);
//		分配bid
//      获得get品牌id
        $bid=Q('get.bid',0,'intavl');
		View::with('bid',$bid);
//		判断品牌bid是否存在
		if($bid){
//			通过品牌bid查找商品id
			$gids=$commodity->where('brand_bid='.$bid)->lists('cmid');
		}
		
		//2.根据gid找到商品属性
		$goodsAttr = $this->gidGetAttr($gids);
		View::with('goodsAttr',$goodsAttr);
		
		//3.处理筛选参数param 0_0_.....
		$num = count($goodsAttr);
		$param = isset($_GET['param']) ? explode('_', $_GET['param']) : array_fill(0, $num, 0);
	    View::with('param',$param);
		
		//4.通过param参数筛选商品gid
		$resultGids = $this->filter($param,$gids);
		
		if(!$resultGids) $resultGids=array(0);
//		6.获得当前分类商品总数
		$tal=count($resultGids);
//		获得页面个数
		$page=Page::row(8)->make($tal);
//		分配页面页码
		View::with('page',$page);
		
		//$g=Q('get.order',0,'intval');
		$g = isset($_GET['o']) ? $_GET['o'] : 0;
		
	    if($g==1){
	    	$comdata=$commodity->where("cmid in(". implode(',', $resultGids).")")->limit(Page::limit())->orderby('sptprice','DESC')->get();
	    }else if($g==2){
	    	$comdata=$commodity->where("cmid in(". implode(',', $resultGids).")")->limit(Page::limit())->orderby('click','DESC')->get();
	    	
	    }else if($g==3){
	    	$comdata=$commodity->where("cmid in(". implode(',', $resultGids).")")->limit(Page::limit())->orderby('registerdate','DESC')->get();
	    	
	    }else{
	    	$comdata=$commodity->where("cmid in(". implode(',', $resultGids).")")->limit(Page::limit())->get();
	    }
	        
//      分配页面
			View::with('comdata',$comdata);
			
        View::make();
    }
	

	//1.通过cid获得gid
	private function cidGetGids($cid){
		//1.通过当前的cid获得对应的所有的子集cid
//		实例化分类表
		$admincate= new \Common\Model\Admincate;
		$cids = $this->getSonCids($admincate->get(),$cid);
		$cids[] = $cid;
		//2.通过子集cid查找对应的商品的gid
//		实例化商品表
        $commodity= new \Common\Model\Commodity;
//      查询分类关联字段在商品表的cmid
		$gids = $commodity->where("catagory_cid in(" . implode(',', $cids) . ")")->lists('cmid');
//		p($gids);die;
		return $gids;
	}
	
	//2.通过typeattribute_taid获得商品的属性
	private function gidGetAttr($gids){
//		实例化商品属性表
        $specs= new \Common\Model\Specs;
		$data = $specs->where("commodity_cmid in(" . implode(',', $gids) . ")")->groupBy('sability')->get();
		//1.把相同类型属性id的归结在一起
		$sameAttr = array();
		foreach ($data as $v) {
			$sameAttr[$v['typeattribute_taid']][] = $v;
		}
//		
		//2.组合数组
//		实例化类型属性表
        $typeattr= new \Common\Model\Typeattribute;
//      p($typeattr);die;
		$temp = array();
		foreach ($sameAttr as $taid => $v) {
			$temp[] = array(
				'name' => $typeattr->where("taid={$taid}")->pluck('taname'),
				'value' => $v
			);
		}
//		p($temp);
		return $temp;
	}
	
	// 4.通过param参数筛选商品交集gid
	private function filter($param,$cidGids){
//		实例化商品属性表
		$specs= new \Common\Model\Specs;
		$gids = array();
		foreach ($param as $gtid) {
			if($gtid){
				//1.找到sability，比如找到"红色"
				$gtvalue = $specs->where("sid={$gtid}")->pluck('sability');
				//2.通过“红色”找到对应的商品id
				$gids[] = $specs->where("sability='{$gtvalue}'")->lists('commodity_cmid');
			}
		}
		
		//如果点击了“不限”之外的属性
		if($gids){
			//取交集
			$gidsTemp = $gids[0];
			foreach ($gids as $v) {
				$gidsTemp = array_intersect($gidsTemp, $v);
			}
			//和当前分类对应的cmid再次取交集
			return array_intersect($gidsTemp, $cidGids);
		}else{//如果是全部是“不限”的时候
			return $cidGids;
		}	
	}
	
	
	
}
